//流程相关全局通用方法和数据
const state = {
  //流程节点信息
  nodeMap: new Map(),
  //选择节点
  selectedNode: {},
  //流程表单数据
  design:{},
  //传递流程图需要的条件
  processConditions: [],
  //流程节点表单权限控制——组件列表
  formItemList: [],
}

//mutations是Vuex中唯一允许更新应用状态的函数，是同步函数
const mutations = {
  /**
   * 选择节点
   * @param state
   * @param val
   */
  selectedNode(state, val) {
    state.selectedNode = val
  },
  /**
   * 加载表单
   * @param state
   * @param val
   */
  loadForm(state, val) {
    state.design = val
  },
  //所有mutations中的方法的第一个参数一定是state变量，用来进行对state中的状态的操作
  //第二个参数是可选参数，用于调用该 mutations 方法的时候传参
  /**
   * 初始化传递流程图需要的条件
   * @param state
   * @param data
   */
  initPConditions ( state, data ) {
    state.processConditions = data
  },
  /**
   * 添加传递流程图需要的条件
   * @param state
   * @param data
   */
  addPCondition ( state, data ) {
    if ( data.formId === null || data.formId === undefined ) return
    if ( !hasCondition( state, data.formId ) ) {
      state.processConditions.unshift( data )
    }
  },
  /**
   * 删除传递流程图需要的条件
   * @param state
   * @param formId
   */
  delPCondition ( state, formId ) {
    if ( formId === null || formId === undefined ) return
    let index = hasCondition( state, formId, true )
    let cons = state.processConditions
    index > -1 && cons.splice( index, 1 )
  },
  /**
   * 清除传递流程图需要的所有条件
   * @param state
   */
  clearPCondition ( state ) {
    state.processConditions = []
  },
  /**
   * 修改流程节点表单权限控制——组件列表
   * @param state
   * @param list
   */
  updateFormItemList ( state, list ) {
    state.formItemList = list
  }
}

export default {
  // 必须加模块名前缀
  namespaced: true,
  state,
  mutations
}
